home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
listings
/
v_09_05
/
9n05125a
< prev
next >
Wrap
Text File
|
1991-03-16
|
9KB
|
300 lines
/*****************************************************
* file c:\cips\display.c
*
* Purpose: These functions display images on
* a the monitor.
*
* External Calls:
* cips.c - clear_text_screen
*
* Modifications:
* 17 June 1987 - created
* August 1990 - extension modifications for use
* in the C Image Processing System.
********************************************************/
#include "d:\cips\cips.h"
/***************************
* display_image(...
****************************/
display_image(file_name, image, il, ie, ll, le,
image_header, monitor_type,
color_transform, invert,
image_colors, display_colors)
char color_transform[],
file_name[],
monitor_type[];
int display_colors,
image_colors,
invert,
il,
ie,
ll,
le;
short image[ROWS][COLS];
struct tiff_header_struct *image_header;
{
char channels[80],
response[80];
int a,
b,
c,
channel,
display_mode,
key,
horizontal,
max_horizontal,
max_vertical,
not_finished,
r,
vertical;
unsigned int block,
color,
i,
j,
x,
y;
not_finished = 1;
while(not_finished){
if(display_colors == 16){
if(monitor_type[0] == 'V'){
horizontal = 4;
vertical = 6;
display_mode = _VRES16COLOR; /* MSC 6.0 */
} /* ends if V */
if(monitor_type[0] == 'E'){
horizontal = 3;
vertical = 6;
display_mode = _ERESCOLOR; /* MSC 6.0 */
} /* ends if E */
} /* ends if colors == 16 */
else{
horizontal = 2;
vertical = 2;
display_mode = _MAXCOLORMODE; /* MSC 6.0 */
}
max_horizontal = (image_header->image_length+50)/100;
max_vertical = (image_header->image_width+50)/100;
if(horizontal > max_horizontal) horizontal = max_horizontal;
if(vertical > max_vertical) vertical = max_vertical;
/* set graphics mode */
_setvideomode(display_mode); /* MSC 6.0 */
if(display_colors == 16) map_16_shades_of_gray(display_mode);
/****************************************
* Loop over this size and
* read and display ROWSxCOLS arrays.
*****************************************/
for(a=0; a<vertical; a++){
for(b=0; b<horizontal; b++){
x = a*100;
y = b*100;
read_tiff_image(file_name, image, il+y,
ie+x, ll+y, le+x);
display_image_portion(image, x, y, display_colors,
image_colors, invert);
} /* ends loop over b */
} /* ends loop over a */
read_string(response);
printf("\nEnter 0 to quit 1 to do again");
get_integer(¬_finished);
/* set display back to text mode */
clear_text_screen();
} /* ends while not_finished */
} /* ends main */
/**********************************
* display_menu_for_display_image(
************************************/
display_menu_for_display_image(image_colors,
display_colors, invert,
color_transform, monitor_type)
char color_transform[], monitor_type[];
int *invert, *image_colors, *display_colors;
{
char response[80];
int int_response, not_finished, r;
not_finished = 1;
while(not_finished){
printf("\n\nDISPLAY> Enter choice (0 for no change) ");
printf("\nDISPLAY> 1. Invert is %d (1=on 0=off)", *invert);
printf("\nDISPLAY> 2. Color Transform-- %s",
color_transform);
printf("\nDISPLAY> 3. Input image has %d colors",
*image_colors);
printf("\nDISPLAY> 4. Display will show %d colors",
*display_colors);
printf("\nDISPLAY> 5. Monitor type is %s",
monitor_type);
printf("\nDISPLAY> _\b");
get_integer(&r);
if(r == 0){
not_finished = 0;
}
if(r == 1){
printf(
"\nDISPLAY> Enter 1 for invert on 0 for invert off");
printf("\nDISPLAY> ___");
get_integer(&int_response);
*invert = int_response;
} /* ends if r == 1 */
if(r == 2){
printf("\nDISPLAY> Enter the new color transform mode ");
printf(
"\nDISPLAY> (S) Straight mode (M) Modified mode");
printf("\nDISPLAY> _\b");
read_string(response);
if((response[0] == 'S') ||
(response[0] == 's'))
strcpy(color_transform, "Straight mode");
else
strcpy(color_transform, "Modified mode");
} /* ends if r == 2 */
if(r == 3){
printf(
"\nDISPLAY> Enter the number of colors in the input image"
);
printf("\nDISPLAY> ___");
get_integer(&int_response);
*image_colors = int_response;
} /* ends if r == 3 */
if(r == 4){
printf(
"\nDISPLAY> Enter the number of colors for the display");
printf("\nDISPLAY> ___");
get_integer(&int_response);
*display_colors = int_response;
} /* ends if r == 4 */
if(r == 5){
printf("\nDISPLAY> Enter the new monitor type");
printf(
"\nDISPLAY> (E) EGA (V) VGA");
printf("\nDISPLAY> _\b");
read_string(response);
if((response[0] == 'E') ||
(response[0] == 'e'))
strcpy(monitor_type, "EGA");
else
strcpy(monitor_type, "VGA");
} /* ends if r == 5 */
} /* ends while not_finished */
} /* ends display_menu */
/********************************
* display_image_portion(...
*********************************/
display_image_portion(image, x, y, display_colors, image_colors,
invert)
int invert, display_colors, image_colors;
short image[ROWS][COLS];
unsigned int x, y;
{
unsigned int color, i, j;
if(invert == 1){
if(image_colors == 256){
for(i=0; i<ROWS; i++)
for(j=0; j<COLS; j++)
image[i][j] = 255 - image[i][j];
} /* ends if image_colors = 256 */
if(image_colors == 16){
for(i=0; i<ROWS; i++)
for(j=0; j<COLS; j++)
image[i][j] = 15 - image[i][j];
} /* ends if image_colors = 16 */
} /* ends if invert == 1 */
for(i=0; i<ROWS; i++){
for(j=0; j<COLS; j++){
if( (display_colors == 16) &&
(image_colors == 256))
color = image[i][j]/16;
if( (display_colors == 16) &&
(image_colors == 16))
color = image[i][j];
if( (display_colors == 256) &&
(image_colors == 256))
color = image[i][j];
if( (display_colors == 256) &&
(image_colors == 16))
color = image[i][j]*16;
_setcolor(color); /* MSC 6.0 statements */
_setpixel(j+x, i+y);
/*my_set_pixel(j+x, i+y, color);*/
} /* ends loop over j */
} /* ends loop over i */
} /* ends display_image_portion */
/**********************************************
* map_16_shades_of_gray(...
*
* This function maps 16 shades of gray into
* the first 16 color indices. This allows
* you to display a true "black and white"
* image on a color monitor.
*********************************************/
map_16_shades_of_gray(display_mode)
int display_mode;
{
/* all MSC 6.0 statements */
_setvideomode(di